package model

import "github.com/jinzhu/gorm"

// 标签数据模型文件

type Tag struct {
	*Model
	Name string `json:"name"`
	State uint8 `json:"state"`
}

func (t Tag) TableName() string  {
	return "blog_tag"
}

// Count 获取匹配标签的总数
func (t Tag) Count(db *gorm.DB) (int, error) {
	// select * from blog_tags where name=xx and age=xx and is_del=xxx
	var count int
	if t.Name != "" {
		db = db.Where("name = ?", t.Name)
	}
	db = db.Where("state = ?", t.State)
	err := db.Model(&t).Where("is_del = ?", 0).Count(&count).Error // 获取 name state is_del 匹配的数据总数
	if err != nil {
		return 0, err
	}
	return count, nil
}

// List 获取指定范围内的匹配标签
func (t Tag) List(db *gorm.DB, pageOffset int, pageSize int) ([]Tag, error)  {
	var tags []Tag
	
	if pageSize > pageOffset {
		db = db.Offset(pageOffset).Limit(pageSize)
	}
	if t.Name != "" {
		db = db.Where("name = ?", t.Name)
	}
	db = db.Where("state = ?", t.State)
	
	err := db.Where("is_del = ?", 0).Find(&tags).Error
	if err != nil {
		return nil, err
	}
	
	return tags, nil
}

// Create 根据结构体数据创建一条记录
func (t Tag) Create(db *gorm.DB) error  {
	//return db.Create(&t).Error // 更新全部字段, 包括时间字段
	return db.Select("name", "created_by", "modified_by", "is_del", "state").Create(&t).Error // 只更新指定字段
}

// Update 更新没有被删除的指定标签
func (t Tag) Update(db *gorm.DB) error {
	//db.Where("id = ?", t.ID).Where("is_del", 0)
	db = db.Model(&Tag{}).Where("id = ? AND is_del = ?", t.ID, 0)
	return db.Update(&t).Error
}

// Delete 删除某条记录
func (t Tag) Delete(db *gorm.DB) error {
	return db.Where("id = ? AND is_del = ?", t.ID, 0).Delete(&t).Error
}